package com.demo.java.OD151_200.OD175;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【新员工座位安排系统】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145801720
 */
public class OdMain {
    public static void main(String[] args) {
        // 创建 Scanner 对象用于读取输入
        Scanner scanner = new Scanner(System.in);

        // 读取一行输入，并用空格分隔成字符串数组 F
        String line = scanner.nextLine();
        String[] F = line.split("\\s+");

        // 获取数组 F 的长度，即元素的数量
        int n = F.length;

        // 检查输入数组的长度是否合法（在 1 到 100000 之间）
        try {
            if (n < 1 || n > 100000) {
                throw new Exception(); // 如果不合法则抛出异常
            }
        } catch (Exception e) {
            // 如果发生异常，则输出 "Error!" 并结束程序
            System.out.println("Error!");
            return;
        }

        // 创建一个 Map 用于存储每个 0 元素位置和其对应的朋友数量
        Map<Integer, Integer> friend = new HashMap<>();

        // 只要数组中存在 "0" 元素，就一直处理
        while (containsZero(F)) {
            // 找到数组中第一个 "0" 元素的位置
            int position = findZeroPosition(F);

            // 如果没有找到 "0"，则退出循环
            if (position == -1) {
                break;
            }

            int f = 0; // 用于计数 "0" 左右两边的 "1" 数量
            int left = position - 1; // "0" 左边的索引
            int right = position + 1; // "0" 右边的索引

            // 向左遍历，找到连续的 "1" 并计数
            while (left >= 0) {
                if (F[left].equals("1")) {
                    f++; // 如果当前元素是 "1"，计数加一
                    left--; // 向左移
                } else {
                    break; // 遇到不是 "1" 的元素就停止
                }
            }

            // 向右遍历，找到连续的 "1" 并计数
            while (right < n) {
                if (F[right].equals("1")) {
                    f++; // 如果当前元素是 "1"，计数加一
                    right++; // 向右移
                } else {
                    break; // 遇到不是 "1" 的元素就停止
                }
            }

            // 将当前 "0" 元素的位置信息及其左右 "1" 数量存入 map 中
            friend.put(position, f);

            // 将当前处理的 "0" 元素标记为 "3"，表示已处理
            F[position] = "3";
        }

        // 如果 map 中有记录
        if (!friend.isEmpty()) {
            // 获取 map 中最大的朋友数量
            int max_value = friend.values().stream().max(Integer::compare).orElse(0);
            // 输出最大的朋友数量
            System.out.println(max_value);
        } else {
            // 如果没有记录，输出 0
            System.out.println(0);
        }
    }

    // 检查数组中是否包含 "0" 元素
    private static boolean containsZero(String[] array) {
        for (String element : array) {
            if (element.equals("0")) {
                return true; // 如果找到 "0"，返回 true
            }
        }
        return false; // 否则返回 false
    }

    // 查找数组中第一个 "0" 元素的位置
    private static int findZeroPosition(String[] array) {
        for (int i = 0; i < array.length; i++) {
            if (array[i].equals("0")) {
                return i; // 找到 "0" 返回其位置
            }
        }
        return -1; // 如果没有找到 "0"，返回 -1
    }
}